{ "cells": [ { "cell_type": "markdown", "id": "c85f17de", "metadata": {}, "source": [ "# LMP Data Examples\n", "\n", "## Walkthrough on how to query LMP data from PJM using gridstatus" ] }, { "cell_type": "code", "execution_count": 1, "id": "d0ad47ce", "metadata": {}, "outputs": [], "source": [ "import gridstatus\n", "import pandas as pd" ] }, { "cell_type": "code", "execution_count": 2, "id": "55d3f5c9", "metadata": {}, "outputs": [], "source": [ "iso = gridstatus.PJM()" ] }, { "cell_type": "markdown", "id": "5f2f68dc", "metadata": {}, "source": [ "## Available Markets\n", "\n", "PJM has 3 LMP Markets you can query:" ] }, { "cell_type": "code", "execution_count": 3, "id": "0df4d382", "metadata": {}, "outputs": [ { "data": { "text/plain": [ "[,\n", " ,\n", " ]" ] }, "execution_count": 3, "metadata": {}, "output_type": "execute_result" } ], "source": [ "iso.markets" ] }, { "cell_type": "markdown", "id": "4526f973", "metadata": {}, "source": [ "## Query LMPs for Hubs\n", "\n", "By default, the LMP methods will get data for the Hub nodes in PJM" ] }, { "cell_type": "code", "execution_count": 4, "id": "83b67ed8", "metadata": {}, "outputs": [ { "data": { "text/html": [ "
\n", "\n", "\n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", "
TimeMarketLocationLocation NameLocation TypeLMPEnergyCongestionLoss
02022-01-01 00:00:00-05:00REAL_TIME_HOURLY51217EASTERN HUBHUB18.79821618.91-0.038889-0.071229
12022-01-01 00:00:00-05:00REAL_TIME_HOURLY51287WEST INT HUBHUB18.82106518.910.011945-0.099213
22022-01-01 00:00:00-05:00REAL_TIME_HOURLY51288WESTERN HUBHUB18.69430518.91-0.005981-0.208048
32022-01-01 00:00:00-05:00REAL_TIME_HOURLY4669664NEW JERSEY HUBHUB18.82603318.91-0.011720-0.070580
42022-01-01 00:00:00-05:00REAL_TIME_HOURLY33092311CHICAGO GEN HUBHUB18.66121818.910.032487-0.279603
..............................
2832022-01-01 23:00:00-05:00REAL_TIME_HOURLY34497125AEP GEN HUBHUB19.75774119.690.418618-0.345877
2842022-01-01 23:00:00-05:00REAL_TIME_HOURLY34497127AEP-DAYTON HUBHUB20.35198219.690.6034430.063539
2852022-01-01 23:00:00-05:00REAL_TIME_HOURLY34497151OHIO HUBHUB20.52385219.690.7054240.133429
2862022-01-01 23:00:00-05:00REAL_TIME_HOURLY35010337DOMINION HUBHUB19.11182019.69-0.5988780.025698
2872022-01-01 23:00:00-05:00REAL_TIME_HOURLY116013751ATSI GEN HUBHUB20.40339019.690.846534-0.128144
\n", "

288 rows × 9 columns

\n", "
" ], "text/plain": [ " Time Market Location Location Name \\\n", "0 2022-01-01 00:00:00-05:00 REAL_TIME_HOURLY 51217 EASTERN HUB \n", "1 2022-01-01 00:00:00-05:00 REAL_TIME_HOURLY 51287 WEST INT HUB \n", "2 2022-01-01 00:00:00-05:00 REAL_TIME_HOURLY 51288 WESTERN HUB \n", "3 2022-01-01 00:00:00-05:00 REAL_TIME_HOURLY 4669664 NEW JERSEY HUB \n", "4 2022-01-01 00:00:00-05:00 REAL_TIME_HOURLY 33092311 CHICAGO GEN HUB \n", ".. ... ... ... ... \n", "283 2022-01-01 23:00:00-05:00 REAL_TIME_HOURLY 34497125 AEP GEN HUB \n", "284 2022-01-01 23:00:00-05:00 REAL_TIME_HOURLY 34497127 AEP-DAYTON HUB \n", "285 2022-01-01 23:00:00-05:00 REAL_TIME_HOURLY 34497151 OHIO HUB \n", "286 2022-01-01 23:00:00-05:00 REAL_TIME_HOURLY 35010337 DOMINION HUB \n", "287 2022-01-01 23:00:00-05:00 REAL_TIME_HOURLY 116013751 ATSI GEN HUB \n", "\n", " Location Type LMP Energy Congestion Loss \n", "0 HUB 18.798216 18.91 -0.038889 -0.071229 \n", "1 HUB 18.821065 18.91 0.011945 -0.099213 \n", "2 HUB 18.694305 18.91 -0.005981 -0.208048 \n", "3 HUB 18.826033 18.91 -0.011720 -0.070580 \n", "4 HUB 18.661218 18.91 0.032487 -0.279603 \n", ".. ... ... ... ... ... \n", "283 HUB 19.757741 19.69 0.418618 -0.345877 \n", "284 HUB 20.351982 19.69 0.603443 0.063539 \n", "285 HUB 20.523852 19.69 0.705424 0.133429 \n", "286 HUB 19.111820 19.69 -0.598878 0.025698 \n", "287 HUB 20.403390 19.69 0.846534 -0.128144 \n", "\n", "[288 rows x 9 columns]" ] }, "execution_count": 4, "metadata": {}, "output_type": "execute_result" } ], "source": [ "df = iso.get_lmp(date=\"Jan 1, 2022\", \n", " market=\"REAL_TIME_HOURLY\")\n", "\n", "df" ] }, { "cell_type": "markdown", "id": "63e6aef0", "metadata": {}, "source": [ "## Query by Date Range\n", "\n", "Frequently, we want to get data across multiple days. We can do that providing a `start` and `end` parameter" ] }, { "cell_type": "code", "execution_count": 5, "id": "095a8468", "metadata": {}, "outputs": [ { "name": "stderr", "output_type": "stream", "text": [ "100%|██████████| 2/2 [00:13<00:00, 6.87s/it]\n" ] }, { "data": { "text/html": [ "
\n", "\n", "\n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", "
TimeMarketLocationLocation NameLocation TypeLMPEnergyCongestionLoss
02021-12-01 00:00:00-05:00REAL_TIME_HOURLY51217EASTERN HUBHUB39.48802090.34-51.0794280.227448
12021-12-01 00:00:00-05:00REAL_TIME_HOURLY51287WEST INT HUBHUB103.48818190.3414.034756-0.886576
22021-12-01 00:00:00-05:00REAL_TIME_HOURLY51288WESTERN HUBHUB94.53035790.345.212530-1.022173
32021-12-01 00:00:00-05:00REAL_TIME_HOURLY4669664NEW JERSEY HUBHUB43.28066790.34-45.547363-1.511971
42021-12-01 00:00:00-05:00REAL_TIME_HOURLY33092311CHICAGO GEN HUBHUB93.69596190.347.781744-4.425782
..............................
178512022-01-31 23:00:00-05:00REAL_TIME_HOURLY34497125AEP GEN HUBHUB57.719079174.60-103.599145-13.282610
178522022-01-31 23:00:00-05:00REAL_TIME_HOURLY34497127AEP-DAYTON HUBHUB51.607433174.60-112.049531-10.943869
178532022-01-31 23:00:00-05:00REAL_TIME_HOURLY34497151OHIO HUBHUB46.798564174.60-116.162118-11.640152
178542022-01-31 23:00:00-05:00REAL_TIME_HOURLY35010337DOMINION HUBHUB76.087972174.60-101.4143202.901459
178552022-01-31 23:00:00-05:00REAL_TIME_HOURLY116013751ATSI GEN HUBHUB75.254943174.60-91.131780-8.214110
\n", "

17856 rows × 9 columns

\n", "
" ], "text/plain": [ " Time Market Location Location Name \\\n", "0 2021-12-01 00:00:00-05:00 REAL_TIME_HOURLY 51217 EASTERN HUB \n", "1 2021-12-01 00:00:00-05:00 REAL_TIME_HOURLY 51287 WEST INT HUB \n", "2 2021-12-01 00:00:00-05:00 REAL_TIME_HOURLY 51288 WESTERN HUB \n", "3 2021-12-01 00:00:00-05:00 REAL_TIME_HOURLY 4669664 NEW JERSEY HUB \n", "4 2021-12-01 00:00:00-05:00 REAL_TIME_HOURLY 33092311 CHICAGO GEN HUB \n", "... ... ... ... ... \n", "17851 2022-01-31 23:00:00-05:00 REAL_TIME_HOURLY 34497125 AEP GEN HUB \n", "17852 2022-01-31 23:00:00-05:00 REAL_TIME_HOURLY 34497127 AEP-DAYTON HUB \n", "17853 2022-01-31 23:00:00-05:00 REAL_TIME_HOURLY 34497151 OHIO HUB \n", "17854 2022-01-31 23:00:00-05:00 REAL_TIME_HOURLY 35010337 DOMINION HUB \n", "17855 2022-01-31 23:00:00-05:00 REAL_TIME_HOURLY 116013751 ATSI GEN HUB \n", "\n", " Location Type LMP Energy Congestion Loss \n", "0 HUB 39.488020 90.34 -51.079428 0.227448 \n", "1 HUB 103.488181 90.34 14.034756 -0.886576 \n", "2 HUB 94.530357 90.34 5.212530 -1.022173 \n", "3 HUB 43.280667 90.34 -45.547363 -1.511971 \n", "4 HUB 93.695961 90.34 7.781744 -4.425782 \n", "... ... ... ... ... ... \n", "17851 HUB 57.719079 174.60 -103.599145 -13.282610 \n", "17852 HUB 51.607433 174.60 -112.049531 -10.943869 \n", "17853 HUB 46.798564 174.60 -116.162118 -11.640152 \n", "17854 HUB 76.087972 174.60 -101.414320 2.901459 \n", "17855 HUB 75.254943 174.60 -91.131780 -8.214110 \n", "\n", "[17856 rows x 9 columns]" ] }, "execution_count": 5, "metadata": {}, "output_type": "execute_result" } ], "source": [ "df = iso.get_lmp(start=\"Dec 1, 2021\",\n", " end=\"Feb 1, 2022\",\n", " market=\"REAL_TIME_HOURLY\",\n", " location_type=\"HUB\")\n", "\n", "df" ] }, { "cell_type": "markdown", "id": "ba8ddcff", "metadata": {}, "source": [ "## Query LMP All Nodes\n", "\n", "WARNING: There are over 10,000 unique nodes in PJM, so it's recommended to either query for specific nodes id or use the `location_type` parameter to reduce results. In the query below, you can see there are 300,000 rows for a single day." ] }, { "cell_type": "code", "execution_count": 6, "id": "245de530", "metadata": {}, "outputs": [ { "name": "stderr", "output_type": "stream", "text": [ "100%|██████████| 4/4 [00:26<00:00, 8.98s/it]\n" ] }, { "data": { "text/html": [ "
\n", "\n", "\n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", "
TimeMarketLocationLocation NameLocation TypeLMPEnergyCongestionLoss
02022-01-01 00:00:00-05:00REAL_TIME_HOURLY1PJM-RTOZONE18.91470318.910.0002510.006118
12022-01-01 00:00:00-05:00REAL_TIME_HOURLY3MID-ATL/APSZONE18.73076418.91-0.024260-0.153309
22022-01-01 00:00:00-05:00REAL_TIME_HOURLY48592ALDENELOAD18.98000018.910.0100000.060000
32022-01-01 00:00:00-05:00REAL_TIME_HOURLY48593ALDENELOAD18.98000018.910.0100000.060000
42022-01-01 00:00:00-05:00REAL_TIME_HOURLY48594ATHENIALOAD19.16000018.910.0400000.210000
..............................
168672022-01-01 23:00:00-05:00REAL_TIME_HOURLY2156112525STRAWTONLOAD19.97000019.690.690000-0.400000
168682022-01-01 23:00:00-05:00REAL_TIME_HOURLY2156112528FREDRCKBLOAD17.19000019.69-1.860000-0.630000
168692022-01-01 23:00:00-05:00REAL_TIME_HOURLY2156112529BOONECOLOAD20.18000019.690.520000-0.020000
168702022-01-01 23:00:00-05:00REAL_TIME_HOURLY2156112530ENEWMARKLOAD15.07000019.69-4.8100000.200000
168712022-01-01 23:00:00-05:00REAL_TIME_HOURLY2156112531ASHFIEPLLOAD19.93000019.690.1200000.120000
\n", "

316872 rows × 9 columns

\n", "
" ], "text/plain": [ " Time Market Location Location Name \\\n", "0 2022-01-01 00:00:00-05:00 REAL_TIME_HOURLY 1 PJM-RTO \n", "1 2022-01-01 00:00:00-05:00 REAL_TIME_HOURLY 3 MID-ATL/APS \n", "2 2022-01-01 00:00:00-05:00 REAL_TIME_HOURLY 48592 ALDENE \n", "3 2022-01-01 00:00:00-05:00 REAL_TIME_HOURLY 48593 ALDENE \n", "4 2022-01-01 00:00:00-05:00 REAL_TIME_HOURLY 48594 ATHENIA \n", "... ... ... ... ... \n", "16867 2022-01-01 23:00:00-05:00 REAL_TIME_HOURLY 2156112525 STRAWTON \n", "16868 2022-01-01 23:00:00-05:00 REAL_TIME_HOURLY 2156112528 FREDRCKB \n", "16869 2022-01-01 23:00:00-05:00 REAL_TIME_HOURLY 2156112529 BOONECO \n", "16870 2022-01-01 23:00:00-05:00 REAL_TIME_HOURLY 2156112530 ENEWMARK \n", "16871 2022-01-01 23:00:00-05:00 REAL_TIME_HOURLY 2156112531 ASHFIEPL \n", "\n", " Location Type LMP Energy Congestion Loss \n", "0 ZONE 18.914703 18.91 0.000251 0.006118 \n", "1 ZONE 18.730764 18.91 -0.024260 -0.153309 \n", "2 LOAD 18.980000 18.91 0.010000 0.060000 \n", "3 LOAD 18.980000 18.91 0.010000 0.060000 \n", "4 LOAD 19.160000 18.91 0.040000 0.210000 \n", "... ... ... ... ... ... \n", "16867 LOAD 19.970000 19.69 0.690000 -0.400000 \n", "16868 LOAD 17.190000 19.69 -1.860000 -0.630000 \n", "16869 LOAD 20.180000 19.69 0.520000 -0.020000 \n", "16870 LOAD 15.070000 19.69 -4.810000 0.200000 \n", "16871 LOAD 19.930000 19.69 0.120000 0.120000 \n", "\n", "[316872 rows x 9 columns]" ] }, "execution_count": 6, "metadata": {}, "output_type": "execute_result" } ], "source": [ "df = iso.get_lmp(date=\"Jan 1, 2022\", \n", " market=\"REAL_TIME_HOURLY\",\n", " locations=\"ALL\")\n", "\n", "df" ] }, { "cell_type": "markdown", "id": "996777de", "metadata": {}, "source": [ "## Query by Location Type\n", "\n", "Ths following locations types are available:" ] }, { "cell_type": "code", "execution_count": 7, "id": "e5e33854", "metadata": {}, "outputs": [ { "data": { "text/plain": [ "['ZONE',\n", " 'LOAD',\n", " 'GEN',\n", " 'AGGREGATE',\n", " 'INTERFACE',\n", " 'EXT',\n", " 'HUB',\n", " 'EHV',\n", " 'TIE',\n", " 'RESIDUAL_METERED_EDC']" ] }, "execution_count": 7, "metadata": {}, "output_type": "execute_result" } ], "source": [ "iso.location_types" ] }, { "cell_type": "code", "execution_count": 8, "id": "b41e0a4e", "metadata": {}, "outputs": [ { "data": { "text/html": [ "
\n", "\n", "\n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", "
TimeMarketLocationLocation NameLocation TypeLMPEnergyCongestionLoss
02022-10-20 00:00:00-04:00DAY_AHEAD_HOURLY1PJM-RTOZONE57.37064054.722.1530590.497581
12022-10-20 00:00:00-04:00DAY_AHEAD_HOURLY3MID-ATL/APSZONE60.72785554.724.6326581.375197
22022-10-20 00:00:00-04:00DAY_AHEAD_HOURLY51291AECOZONE42.34288654.72-11.196601-1.180513
32022-10-20 00:00:00-04:00DAY_AHEAD_HOURLY51292BGEZONE67.66996354.7211.3182351.631728
42022-10-20 00:00:00-04:00DAY_AHEAD_HOURLY51293DPLZONE43.32423554.72-11.5978140.202049
..............................
5472022-10-20 23:00:00-04:00DAY_AHEAD_HOURLY37737283DUQZONE60.05726456.512.8665170.680747
5482022-10-20 23:00:00-04:00DAY_AHEAD_HOURLY116013753ATSIZONE60.78464656.513.6883610.586285
5492022-10-20 23:00:00-04:00DAY_AHEAD_HOURLY124076095DEOKZONE59.63675356.513.0338940.092859
5502022-10-20 23:00:00-04:00DAY_AHEAD_HOURLY970242670EKPCZONE60.89720756.514.438691-0.051484
5512022-10-20 23:00:00-04:00DAY_AHEAD_HOURLY1709725933OVECZONE59.64000056.513.250000-0.120000
\n", "

552 rows × 9 columns

\n", "
" ], "text/plain": [ " Time Market Location Location Name \\\n", "0 2022-10-20 00:00:00-04:00 DAY_AHEAD_HOURLY 1 PJM-RTO \n", "1 2022-10-20 00:00:00-04:00 DAY_AHEAD_HOURLY 3 MID-ATL/APS \n", "2 2022-10-20 00:00:00-04:00 DAY_AHEAD_HOURLY 51291 AECO \n", "3 2022-10-20 00:00:00-04:00 DAY_AHEAD_HOURLY 51292 BGE \n", "4 2022-10-20 00:00:00-04:00 DAY_AHEAD_HOURLY 51293 DPL \n", ".. ... ... ... ... \n", "547 2022-10-20 23:00:00-04:00 DAY_AHEAD_HOURLY 37737283 DUQ \n", "548 2022-10-20 23:00:00-04:00 DAY_AHEAD_HOURLY 116013753 ATSI \n", "549 2022-10-20 23:00:00-04:00 DAY_AHEAD_HOURLY 124076095 DEOK \n", "550 2022-10-20 23:00:00-04:00 DAY_AHEAD_HOURLY 970242670 EKPC \n", "551 2022-10-20 23:00:00-04:00 DAY_AHEAD_HOURLY 1709725933 OVEC \n", "\n", " Location Type LMP Energy Congestion Loss \n", "0 ZONE 57.370640 54.72 2.153059 0.497581 \n", "1 ZONE 60.727855 54.72 4.632658 1.375197 \n", "2 ZONE 42.342886 54.72 -11.196601 -1.180513 \n", "3 ZONE 67.669963 54.72 11.318235 1.631728 \n", "4 ZONE 43.324235 54.72 -11.597814 0.202049 \n", ".. ... ... ... ... ... \n", "547 ZONE 60.057264 56.51 2.866517 0.680747 \n", "548 ZONE 60.784646 56.51 3.688361 0.586285 \n", "549 ZONE 59.636753 56.51 3.033894 0.092859 \n", "550 ZONE 60.897207 56.51 4.438691 -0.051484 \n", "551 ZONE 59.640000 56.51 3.250000 -0.120000 \n", "\n", "[552 rows x 9 columns]" ] }, "execution_count": 8, "metadata": {}, "output_type": "execute_result" } ], "source": [ "df = iso.get_lmp(date=\"Oct 20, 2022\",\n", " market=\"DAY_AHEAD_HOURLY\",\n", " location_type=\"ZONE\")\n", "\n", "df" ] }, { "cell_type": "markdown", "id": "8d448b38", "metadata": {}, "source": [ "## Query Real Time 5 Minute Market\n", "\n", "**WARNING:** The 5 minute market returns 12x as much data as the hourly markets. Additionally, PJM API also doesn't allow server-side filtering to take place in most cases requiring gridstatus to download the data for all 10,000+ nodes. As a result, it is easy for Real Time 5 Minute market querys requiring download hundreds of millions 1 billion rows!\n", "\n", "If you want to use the Real Time 5 Min market, that fastest queries will be for dates within 186 days of today (~6 months) and for specifc list of node ids." ] }, { "cell_type": "code", "execution_count": 9, "id": "6b9f9028", "metadata": {}, "outputs": [ { "data": { "text/html": [ "
\n", "\n", "\n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", "
TimeMarketLocationLocation NameLocation TypeLMPEnergyCongestionLoss
02022-10-14 00:00:00-04:00REAL_TIME_5_MIN51217EASTERN HUBHUB20.721253164.48-142.712350-1.046397
12022-10-14 00:00:00-04:00REAL_TIME_5_MIN51287WEST INT HUBHUB169.980500164.486.829950-1.329450
22022-10-14 00:00:00-04:00REAL_TIME_5_MIN51288WESTERN HUBHUB182.803712164.4818.450801-0.127089
32022-10-14 00:00:00-04:00REAL_TIME_5_MIN4669664NEW JERSEY HUBHUB57.938125164.48-103.119189-3.422686
42022-10-14 00:00:00-04:00REAL_TIME_5_MIN33092311CHICAGO GEN HUBHUB191.714308164.4830.192231-2.957923
..............................
483792022-10-27 23:55:00-04:00REAL_TIME_5_MIN34497125AEP GEN HUBHUB32.00421129.413.137632-0.543421
483802022-10-27 23:55:00-04:00REAL_TIME_5_MIN34497127AEP-DAYTON HUBHUB30.41596429.411.140577-0.134613
483812022-10-27 23:55:00-04:00REAL_TIME_5_MIN34497151OHIO HUBHUB29.70969129.410.484335-0.184644
483822022-10-27 23:55:00-04:00REAL_TIME_5_MIN35010337DOMINION HUBHUB33.40726729.413.4704060.526861
483832022-10-27 23:55:00-04:00REAL_TIME_5_MIN116013751ATSI GEN HUBHUB29.91636429.410.805000-0.298636
\n", "

48384 rows × 9 columns

\n", "
" ], "text/plain": [ " Time Market Location Location Name \\\n", "0 2022-10-14 00:00:00-04:00 REAL_TIME_5_MIN 51217 EASTERN HUB \n", "1 2022-10-14 00:00:00-04:00 REAL_TIME_5_MIN 51287 WEST INT HUB \n", "2 2022-10-14 00:00:00-04:00 REAL_TIME_5_MIN 51288 WESTERN HUB \n", "3 2022-10-14 00:00:00-04:00 REAL_TIME_5_MIN 4669664 NEW JERSEY HUB \n", "4 2022-10-14 00:00:00-04:00 REAL_TIME_5_MIN 33092311 CHICAGO GEN HUB \n", "... ... ... ... ... \n", "48379 2022-10-27 23:55:00-04:00 REAL_TIME_5_MIN 34497125 AEP GEN HUB \n", "48380 2022-10-27 23:55:00-04:00 REAL_TIME_5_MIN 34497127 AEP-DAYTON HUB \n", "48381 2022-10-27 23:55:00-04:00 REAL_TIME_5_MIN 34497151 OHIO HUB \n", "48382 2022-10-27 23:55:00-04:00 REAL_TIME_5_MIN 35010337 DOMINION HUB \n", "48383 2022-10-27 23:55:00-04:00 REAL_TIME_5_MIN 116013751 ATSI GEN HUB \n", "\n", " Location Type LMP Energy Congestion Loss \n", "0 HUB 20.721253 164.48 -142.712350 -1.046397 \n", "1 HUB 169.980500 164.48 6.829950 -1.329450 \n", "2 HUB 182.803712 164.48 18.450801 -0.127089 \n", "3 HUB 57.938125 164.48 -103.119189 -3.422686 \n", "4 HUB 191.714308 164.48 30.192231 -2.957923 \n", "... ... ... ... ... ... \n", "48379 HUB 32.004211 29.41 3.137632 -0.543421 \n", "48380 HUB 30.415964 29.41 1.140577 -0.134613 \n", "48381 HUB 29.709691 29.41 0.484335 -0.184644 \n", "48382 HUB 33.407267 29.41 3.470406 0.526861 \n", "48383 HUB 29.916364 29.41 0.805000 -0.298636 \n", "\n", "[48384 rows x 9 columns]" ] }, "execution_count": 9, "metadata": {}, "output_type": "execute_result" } ], "source": [ "# get last 2 weeks of data\n", "today = pd.Timestamp.now().normalize()\n", "start = today - pd.Timedelta(days=14)\n", "\n", "df = iso.get_lmp(start=start.date(),\n", " end=today,\n", " market=\"REAL_TIME_5_MIN\",\n", " locations=iso.hub_node_ids)\n", "\n", "df" ] }, { "cell_type": "markdown", "id": "294fe5cc", "metadata": {}, "source": [ "## Get List of Node Ids\n", "\n", "Here are all pnodes ids in PJM. You can supply a list of these Ids to the LMP methods" ] }, { "cell_type": "code", "execution_count": 10, "id": "77d5eb58", "metadata": {}, "outputs": [ { "data": { "text/html": [ "
\n", "\n", "\n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", "
pnode_idpnode_namepnode_typepnode_subtypezonevoltage_leveleffective_datetermination_date
01PJM-RTOAGGREGATEZONENoneNone2017-09-08T00:00:009999-12-31T00:00:00
13MID-ATL/APSAGGREGATEZONENoneNone2017-09-08T00:00:009999-12-31T00:00:00
248592ALDENE 230 KV T-10BUSLOADPSEG230 KV1998-04-01T00:00:009999-12-31T00:00:00
348593ALDENE 230 KV T-20BUSLOADPSEG230 KV1998-04-01T00:00:009999-12-31T00:00:00
448594ATHENIA 26 KV AB GRPBUSLOADPSEG26 KV1998-04-01T00:00:009999-12-31T00:00:00
...........................
134262156113476FINLEY 34.5 KV MADSNFSPBUSGENATSI34.5 KV2022-09-14T00:00:009999-12-31T00:00:00
134272156113479MIDWAYAP69 KV T2BUSLOADAEP69 KV2022-09-14T00:00:009999-12-31T00:00:00
134282156113482ZOAR 69 KV LOAD2BUSLOADDPL69 KV2022-09-14T00:00:009999-12-31T00:00:00
134292156113488BERGEN 13 KV CC12BUSGENPSEG13 KV2022-09-14T00:00:009999-12-31T00:00:00
134302156113489PLAUDERV69 KV T-1BUSLOADPSEG69 KV2022-09-14T00:00:009999-12-31T00:00:00
\n", "

13431 rows × 8 columns

\n", "
" ], "text/plain": [ " pnode_id pnode_name pnode_type pnode_subtype zone \\\n", "0 1 PJM-RTO AGGREGATE ZONE None \n", "1 3 MID-ATL/APS AGGREGATE ZONE None \n", "2 48592 ALDENE 230 KV T-10 BUS LOAD PSEG \n", "3 48593 ALDENE 230 KV T-20 BUS LOAD PSEG \n", "4 48594 ATHENIA 26 KV AB GRP BUS LOAD PSEG \n", "... ... ... ... ... ... \n", "13426 2156113476 FINLEY 34.5 KV MADSNFSP BUS GEN ATSI \n", "13427 2156113479 MIDWAYAP69 KV T2 BUS LOAD AEP \n", "13428 2156113482 ZOAR 69 KV LOAD2 BUS LOAD DPL \n", "13429 2156113488 BERGEN 13 KV CC12 BUS GEN PSEG \n", "13430 2156113489 PLAUDERV69 KV T-1 BUS LOAD PSEG \n", "\n", " voltage_level effective_date termination_date \n", "0 None 2017-09-08T00:00:00 9999-12-31T00:00:00 \n", "1 None 2017-09-08T00:00:00 9999-12-31T00:00:00 \n", "2 230 KV 1998-04-01T00:00:00 9999-12-31T00:00:00 \n", "3 230 KV 1998-04-01T00:00:00 9999-12-31T00:00:00 \n", "4 26 KV 1998-04-01T00:00:00 9999-12-31T00:00:00 \n", "... ... ... ... \n", "13426 34.5 KV 2022-09-14T00:00:00 9999-12-31T00:00:00 \n", "13427 69 KV 2022-09-14T00:00:00 9999-12-31T00:00:00 \n", "13428 69 KV 2022-09-14T00:00:00 9999-12-31T00:00:00 \n", "13429 13 KV 2022-09-14T00:00:00 9999-12-31T00:00:00 \n", "13430 69 KV 2022-09-14T00:00:00 9999-12-31T00:00:00 \n", "\n", "[13431 rows x 8 columns]" ] }, "execution_count": 10, "metadata": {}, "output_type": "execute_result" } ], "source": [ "iso.get_pnode_ids()" ] }, { "cell_type": "markdown", "id": "c4cdfc97", "metadata": {}, "source": [ "now, let's query for the the the PJM-RTO aggregate now" ] }, { "cell_type": "code", "execution_count": 11, "id": "92d3b757", "metadata": {}, "outputs": [ { "data": { "text/html": [ "
\n", "\n", "\n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", "
TimeMarketLocationLocation NameLocation TypeLMPEnergyCongestionLoss
02022-10-20 00:00:00-04:00DAY_AHEAD_HOURLY1PJM-RTOZONE57.37064054.722.1530590.497581
12022-10-20 01:00:00-04:00DAY_AHEAD_HOURLY1PJM-RTOZONE53.11818854.03-0.9165100.004698
22022-10-20 02:00:00-04:00DAY_AHEAD_HOURLY1PJM-RTOZONE52.35705052.97-0.6610170.048067
32022-10-20 03:00:00-04:00DAY_AHEAD_HOURLY1PJM-RTOZONE51.96835052.67-0.7350210.033372
42022-10-20 04:00:00-04:00DAY_AHEAD_HOURLY1PJM-RTOZONE58.27035257.710.4881890.072163
52022-10-20 05:00:00-04:00DAY_AHEAD_HOURLY1PJM-RTOZONE78.91817373.544.5819790.796194
62022-10-20 06:00:00-04:00DAY_AHEAD_HOURLY1PJM-RTOZONE111.482429111.42-0.8601570.922586
72022-10-20 07:00:00-04:00DAY_AHEAD_HOURLY1PJM-RTOZONE141.522183162.41-22.7183601.830543
82022-10-20 08:00:00-04:00DAY_AHEAD_HOURLY1PJM-RTOZONE92.74235886.525.3175300.904828
92022-10-20 09:00:00-04:00DAY_AHEAD_HOURLY1PJM-RTOZONE78.04667575.082.3733090.593366
102022-10-20 10:00:00-04:00DAY_AHEAD_HOURLY1PJM-RTOZONE71.46100667.173.5502700.740737
112022-10-20 11:00:00-04:00DAY_AHEAD_HOURLY1PJM-RTOZONE67.39129863.443.3518510.599447
122022-10-20 12:00:00-04:00DAY_AHEAD_HOURLY1PJM-RTOZONE59.89899857.022.4322260.446772
132022-10-20 13:00:00-04:00DAY_AHEAD_HOURLY1PJM-RTOZONE57.04722954.412.2221600.415069
142022-10-20 14:00:00-04:00DAY_AHEAD_HOURLY1PJM-RTOZONE55.75074353.182.1038880.466855
152022-10-20 15:00:00-04:00DAY_AHEAD_HOURLY1PJM-RTOZONE56.00478652.702.6765270.628259
162022-10-20 16:00:00-04:00DAY_AHEAD_HOURLY1PJM-RTOZONE59.05549955.932.6611200.464379
172022-10-20 17:00:00-04:00DAY_AHEAD_HOURLY1PJM-RTOZONE74.19621869.573.8675210.758697
182022-10-20 18:00:00-04:00DAY_AHEAD_HOURLY1PJM-RTOZONE106.76001498.057.5754801.134534
192022-10-20 19:00:00-04:00DAY_AHEAD_HOURLY1PJM-RTOZONE107.72268497.658.4904671.582216
202022-10-20 20:00:00-04:00DAY_AHEAD_HOURLY1PJM-RTOZONE83.80439275.477.3284021.005990
212022-10-20 21:00:00-04:00DAY_AHEAD_HOURLY1PJM-RTOZONE73.69344268.264.7224410.711001
222022-10-20 22:00:00-04:00DAY_AHEAD_HOURLY1PJM-RTOZONE64.47862961.122.8860360.472593
232022-10-20 23:00:00-04:00DAY_AHEAD_HOURLY1PJM-RTOZONE58.55214656.511.6027910.439355
\n", "
" ], "text/plain": [ " Time Market Location Location Name \\\n", "0 2022-10-20 00:00:00-04:00 DAY_AHEAD_HOURLY 1 PJM-RTO \n", "1 2022-10-20 01:00:00-04:00 DAY_AHEAD_HOURLY 1 PJM-RTO \n", "2 2022-10-20 02:00:00-04:00 DAY_AHEAD_HOURLY 1 PJM-RTO \n", "3 2022-10-20 03:00:00-04:00 DAY_AHEAD_HOURLY 1 PJM-RTO \n", "4 2022-10-20 04:00:00-04:00 DAY_AHEAD_HOURLY 1 PJM-RTO \n", "5 2022-10-20 05:00:00-04:00 DAY_AHEAD_HOURLY 1 PJM-RTO \n", "6 2022-10-20 06:00:00-04:00 DAY_AHEAD_HOURLY 1 PJM-RTO \n", "7 2022-10-20 07:00:00-04:00 DAY_AHEAD_HOURLY 1 PJM-RTO \n", "8 2022-10-20 08:00:00-04:00 DAY_AHEAD_HOURLY 1 PJM-RTO \n", "9 2022-10-20 09:00:00-04:00 DAY_AHEAD_HOURLY 1 PJM-RTO \n", "10 2022-10-20 10:00:00-04:00 DAY_AHEAD_HOURLY 1 PJM-RTO \n", "11 2022-10-20 11:00:00-04:00 DAY_AHEAD_HOURLY 1 PJM-RTO \n", "12 2022-10-20 12:00:00-04:00 DAY_AHEAD_HOURLY 1 PJM-RTO \n", "13 2022-10-20 13:00:00-04:00 DAY_AHEAD_HOURLY 1 PJM-RTO \n", "14 2022-10-20 14:00:00-04:00 DAY_AHEAD_HOURLY 1 PJM-RTO \n", "15 2022-10-20 15:00:00-04:00 DAY_AHEAD_HOURLY 1 PJM-RTO \n", "16 2022-10-20 16:00:00-04:00 DAY_AHEAD_HOURLY 1 PJM-RTO \n", "17 2022-10-20 17:00:00-04:00 DAY_AHEAD_HOURLY 1 PJM-RTO \n", "18 2022-10-20 18:00:00-04:00 DAY_AHEAD_HOURLY 1 PJM-RTO \n", "19 2022-10-20 19:00:00-04:00 DAY_AHEAD_HOURLY 1 PJM-RTO \n", "20 2022-10-20 20:00:00-04:00 DAY_AHEAD_HOURLY 1 PJM-RTO \n", "21 2022-10-20 21:00:00-04:00 DAY_AHEAD_HOURLY 1 PJM-RTO \n", "22 2022-10-20 22:00:00-04:00 DAY_AHEAD_HOURLY 1 PJM-RTO \n", "23 2022-10-20 23:00:00-04:00 DAY_AHEAD_HOURLY 1 PJM-RTO \n", "\n", " Location Type LMP Energy Congestion Loss \n", "0 ZONE 57.370640 54.72 2.153059 0.497581 \n", "1 ZONE 53.118188 54.03 -0.916510 0.004698 \n", "2 ZONE 52.357050 52.97 -0.661017 0.048067 \n", "3 ZONE 51.968350 52.67 -0.735021 0.033372 \n", "4 ZONE 58.270352 57.71 0.488189 0.072163 \n", "5 ZONE 78.918173 73.54 4.581979 0.796194 \n", "6 ZONE 111.482429 111.42 -0.860157 0.922586 \n", "7 ZONE 141.522183 162.41 -22.718360 1.830543 \n", "8 ZONE 92.742358 86.52 5.317530 0.904828 \n", "9 ZONE 78.046675 75.08 2.373309 0.593366 \n", "10 ZONE 71.461006 67.17 3.550270 0.740737 \n", "11 ZONE 67.391298 63.44 3.351851 0.599447 \n", "12 ZONE 59.898998 57.02 2.432226 0.446772 \n", "13 ZONE 57.047229 54.41 2.222160 0.415069 \n", "14 ZONE 55.750743 53.18 2.103888 0.466855 \n", "15 ZONE 56.004786 52.70 2.676527 0.628259 \n", "16 ZONE 59.055499 55.93 2.661120 0.464379 \n", "17 ZONE 74.196218 69.57 3.867521 0.758697 \n", "18 ZONE 106.760014 98.05 7.575480 1.134534 \n", "19 ZONE 107.722684 97.65 8.490467 1.582216 \n", "20 ZONE 83.804392 75.47 7.328402 1.005990 \n", "21 ZONE 73.693442 68.26 4.722441 0.711001 \n", "22 ZONE 64.478629 61.12 2.886036 0.472593 \n", "23 ZONE 58.552146 56.51 1.602791 0.439355 " ] }, "execution_count": 11, "metadata": {}, "output_type": "execute_result" } ], "source": [ "df = iso.get_lmp(date=\"Oct 20, 2022\",\n", " market=\"DAY_AHEAD_HOURLY\",\n", " locations=[1])\n", "\n", "df" ] } ], "metadata": { "kernelspec": { "display_name": "Python 3.10.2 64-bit ('isodata')", "language": "python", "name": "python3" }, "language_info": { "codemirror_mode": { "name": "ipython", "version": 3 }, "file_extension": ".py", "mimetype": "text/x-python", "name": "python", "nbconvert_exporter": "python", "pygments_lexer": "ipython3", "version": "3.10.2" }, "vscode": { "interpreter": { "hash": "49f14642123d0cc1afa9fa45716ed5f1e915189c28b01efe02a8b7ec3c0a3fce" } } }, "nbformat": 4, "nbformat_minor": 5 }